package interfases;

import java.awt.Image;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.JLabel;
import javax.swing.JButton;

import persistencia.PersistirImagen;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JTextField;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;

import javax.swing.SwingConstants;


public class IImagen extends JFrame {

	private static final long serialVersionUID = 1L;
	
	private JPanel contentPane;
	private JLabel cuadro;
	private JButton abrir;
	private JButton guardar;
	private JTextField cuadroURL;
	private byte[] byteFoto = null;
	private JSpinner idImagen;
	private JButton cargar;
	private JLabel lblId;
	
	
	public IImagen() {
		
		inicializar();
		
		
		//ACCION DEL BOTON ABRIR
		abrir.addMouseListener(new MouseAdapter() {
			
			public void mouseClicked(MouseEvent arg0) {
				/***************************************************/
		/*-- ESTO SE HACE PARA ABRIR UNA VENTANA PARA SELECIONAR UN ARCHIVO --*/
				File archivo;
				JFileChooser se = new JFileChooser();
				se.setFileFilter(new FileNameExtensionFilter("Archivo de Imagen", "jpg", "jpeg"));
				int estado = se.showOpenDialog(null);
				/***************************************************/
				if(estado == JFileChooser.APPROVE_OPTION){
					
					archivo = se.getSelectedFile(); //PARA OBTENER EL ARCHIVO SELECCIONADO
					cuadroURL.setText(archivo.getAbsolutePath());//ESTO ES PARA OBTENER LA URL DEL ARCHIVO SELECCIONADO
					
					Image foto;
					try {
						foto = ImageIO.read(se.getSelectedFile()).getScaledInstance(cuadro.getWidth(), cuadro.getHeight(), Image.SCALE_DEFAULT);
						cuadro.setIcon(new ImageIcon(foto));
						cuadro.updateUI();
					} catch (IOException e) {
						e.printStackTrace();
					}
					
				}
			}
		});
		
		
		//ACCION DEL BOTON GUARDAR
		guardar.addActionListener(new ActionListener() {
			@SuppressWarnings("resource")
			public void actionPerformed(ActionEvent arg0) {
				
				try {
					//GUARDAR LA IMAGEN SELECCIONADA
					File nombre = new File(cuadroURL.getText());
					FileInputStream foto = new FileInputStream(nombre);
					ByteArrayOutputStream bos = new ByteArrayOutputStream();
					byte[] buf = new byte[1024];
					
					for(int readNum; (readNum = foto.read(buf)) != -1;){
						bos.write(buf,0,readNum);
					}
					
					byteFoto = bos.toByteArray();
					new PersistirImagen().addImagen(byteFoto, cuadroURL.getText());
					JOptionPane.showMessageDialog(null,"FOTO GUARDADA!");
					cuadroURL.setText("");
					
				} 
				catch (Exception e) {
					JOptionPane.showMessageDialog(null,"SELECCIONE LA FOTO PARA GUARDAR!");
				}
				
				
				
			}
		});
		
		
		//ACCION DEL BOTON DE CARGAR LA IMAGEN
		cargar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				cuadroURL.setText("");
				PersistirImagen pi = new PersistirImagen();
				if((int)idImagen.getValue() > 0 && pi.existeImagen((int)idImagen.getValue())){
					cuadro.setIcon(new ImageIcon(pi.getImagen((int)idImagen.getValue())));
					cuadro.updateUI();
				}
				else
					JOptionPane.showMessageDialog(null,"EL ID INGRESADO NO ES VALIDO");
			}
		});
			
	}
	
	
	//CENTRA LA PANTALLA PRINCIPAL
		private void centrarPantalla(JFrame ventana, int x, int y){
			Toolkit t = Toolkit.getDefaultToolkit();
			Dimension pantalla = t.getScreenSize();
			int height = pantalla.height;
			int width = pantalla.width;
			int px =  (int) (width-x)/2;
			int py =  (int) (height-y)/2;
			ventana.setBounds(px, py, x, y);
		}
	
	
	private void inicializar(){
		setTitle("Guardar Imagen a la Base de Datos");
		centrarPantalla(this, 855, 453);
		contentPane = new JPanel();
		contentPane.setBackground(new Color(255, 222, 173));
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		cuadro = new JLabel("");
		cuadro.setBounds(231, 31, 512, 269);
		contentPane.add(cuadro);
		
		abrir = new JButton("Abrir");
		abrir.setBounds(111, 277, 89, 23);
		contentPane.add(abrir);
		
		guardar = new JButton("Guardar");
		guardar.setBounds(12, 277, 89, 23);
		contentPane.add(guardar);
		
		cuadroURL = new JTextField();
		cuadroURL.setBackground(new Color(255, 255, 255));
		cuadroURL.setEditable(false);
		cuadroURL.setBounds(15, 352, 814, 20);
		contentPane.add(cuadroURL);
		cuadroURL.setColumns(10);
		
		cargar = new JButton("Cargar");
		cargar.setBounds(111, 311, 89, 23);
		contentPane.add(cargar);
		
		idImagen = new JSpinner();
		idImagen.setToolTipText("Seleccione el ID");
		idImagen.setModel(new SpinnerNumberModel(new Integer(1), null, null, new Integer(1)));
		idImagen.setBounds(49, 312, 52, 20);
		contentPane.add(idImagen);
		
		lblId = new JLabel("ID");
		lblId.setHorizontalAlignment(SwingConstants.CENTER);
		lblId.setFont(new Font("Tahoma", Font.PLAIN, 14));
		lblId.setBounds(22, 311, 28, 23);
		contentPane.add(lblId);
	}
	
	
}
